package com.coolgor.coldot.interceptor.auth;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.coolgor.coldot.common.wechat.UserAgentUtil;
import com.coolgor.coldot.entity.auth.LocalUser;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

/**
 * 系统登录验证拦截器
 * 
 * @author CoolGor
 *
 */
public class LoginInterceptor implements HandlerInterceptor {
	/**
	 * 主要做事前拦截，即用户操作发生前，改写preHandle里的逻辑，进行拦截
	 */
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		// 从session中取出用户信息来
		Object localUserObj = request.getSession().getAttribute("login_user");
		if (localUserObj != null) {
			// 若用户信息不为空则将session里的用户信息转换成LocalUser实体类对象
			LocalUser localUser = (LocalUser) localUserObj;
			// 做空值判断，确保userId不为空并且该帐号的可用状态为3
			if (localUser != null 
//					&& localUser.getUserID() != null
					&& localUser.getUserID() > 0 
					&& localUser.getStatus() == 3) {
				// 若通过验证则返回true,拦截器返回true之后，用户接下来的操作得以正常执行
				return true;
			}
		}

		/**
		 * 启动这个登录信息过滤器的总开关；
		 * flag = true ; 	这个过滤器生效，访问者必须有登录信息才能访问页面
		 * flag = false ; 	这个过滤器失效，所有人都能访问所有页面，方便测试。
		 */
		boolean flag = false;
		if (flag) {
			//设置编码
			request.setCharacterEncoding("UTF-8");
			response.setContentType("text/html;charset=UTF-8");
			// 若不满足登录验证，则直接跳转到帐号登录页面
			PrintWriter out = response.getWriter();
			if (UserAgentUtil.isMobile(request)) {
				// 移动端
				if ( UserAgentUtil.isWechat(request)) {
					// 微信浏览器
					out.println("<h1>对不起，您的权限不足！</h1>");
					out.println("<h1>请从企业微信的应用入口访问！</h1>");
				} else {
					// 非微信浏览器
					out.println("<h1>对不起，禁止从外部浏览器访问！</h1>");
					out.println("<h1>请从微信访问或企业微信进入系统！</h1>");
				}
			} else {
				// PC端
				out.println("<h1>对不起，您的权限不足！</h1>");
				out.println("<h1>请从权限系统登录！</h1>");
			}
			return false;
		} else {
			return true ;
		}
	}
}
